package main

import (
	"context"
	"image-server/config"
	"image-server/db"
	router "image-server/routers"
	"log"
	"net/http"
	"os"
	"os/signal"
	"syscall"
	"time"
)

func main() {

	// 初始化配置
	if err := config.InitConfig(); err != nil {
		log.Fatalf("配置初始化失败: %v", err)
	}
	// 初始化数据库
	if err := db.InitDB(); err != nil {
		log.Fatalf("数据库初始化失败: %v", err)
	}
	defer db.CloseDB()

	// 初始化路由
	r := router.InitRouter()

	// 创建HTTP服务器
	server := &http.Server{
		Addr:    ":" + config.ServerPort,
		Handler: r,
	}

	// 启动服务器
	go func() {
		log.Printf("服务器启动成功，监听端口: %s\n", config.ServerPort)
		if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
			log.Fatalf("服务器启动失败: %v", err)
		}
	}()

	// 退出处理
	quit := make(chan os.Signal, 1)
	signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) // 监听中断信号
	<-quit                                               // 等待中断信号

	log.Println("开始关闭服务器...")
	// 超时上下文，确保资源释放
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	if err := server.Shutdown(ctx); err != nil {
		log.Fatalf("服务器关闭异常: %v", err)
	}
	log.Println("服务器已优雅关闭")
}
